#include<stdio.h>
#define QSIZE 5

struct queue
{
 int item[QSIZE];
 int front,rear,count;
};

void enqueue(struct queue *pq,int n)
{
 if(pq->count==(QSIZE-1))
   {
    printf("\nqueue is full\n");
   }
 else
   {
    pq->item[pq->rear]=n;
    pq->rear++;
    pq->count++;

    if(pq->rear==QSIZE)
      {
       pq->rear=0;
      }

   }
}

void dequeue(struct queue *pq)
{

 if(pq->count==-1)
   {
    printf("\nqueue is empty\n");
   }
 else
   {
    if(pq->front==(QSIZE-1))
      {
       pq->front=0;
       pq->count--;
      }
    else
      {
       pq->front++;
       pq->count--;
      }
   }
}

void display(struct queue *pq)
{
 int i=0,j=pq->front;
 if(pq->count==-1)
   {
    printf("\nqueue is empty\n");
   }
 else
   {
    j=pq->front;
    for(i=0;i<=pq->count;i++)
       {
        printf("\n%d",pq->item[j]);
        j++;
        if(j==QSIZE)
          {
           j=0;
          }
       }
   }
}

void main()
{
 struct queue q;
 int ch,n;
 q.front=0;
 q.rear=0;
 q.count=-1;

 do
  {
   printf("\nenter choice:\n1.enqueue\n2.dequeue\n3.display\n4.exit\n");
   scanf("%d",&ch);
   switch(ch)
      {
       case 1: printf("\nenter integar to enqueue:");
               scanf("%d",&n);
               enqueue(&q,n);
               break;

       case 2: dequeue(&q);
               break;

       case 3: display(&q);
               break;
      }
  }
 while(ch!=4);
}


